summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAmeer J <52414509+ameerj@users.noreply.github.com>2023-08-14 05:17:28 +0200
committerAmeer J <52414509+ameerj@users.noreply.github.com>2023-08-14 06:17:59 +0200
commitd1c878fb41324614b4f09026ebb3336432fbb559 (patch)
tree42345e00adfddf6b42810ced27a32dec89e9ac20
parentgl_buffer_cache: Enable async downloads (diff)
downloadyuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar
yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.gz
yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.bz2
yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.lz
yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.xz
yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.tar.zst
yuzu-d1c878fb41324614b4f09026ebb3336432fbb559.zip
-rw-r--r--src/video_core/renderer_opengl/gl_buffer_cache.cpp2
-rw-r--r--src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp5
-rw-r--r--src/video_core/renderer_opengl/gl_staging_buffer_pool.h2
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.cpp8
-rw-r--r--src/video_core/renderer_opengl/gl_texture_cache.h8
5 files changed, 16 insertions, 9 deletions
diff --git a/src/video_core/renderer_opengl/gl_buffer_cache.cpp b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
index 9d9c6b9da..d1284e62f 100644
--- a/src/video_core/renderer_opengl/gl_buffer_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_buffer_cache.cpp
@@ -151,7 +151,7 @@ StagingBufferMap BufferCacheRuntime::DownloadStagingBuffer(size_t size, bool def
}
void BufferCacheRuntime::FreeDeferredStagingBuffer(StagingBufferMap& buffer) {
- staging_buffer_pool.FreeDeferredStagingBuffer(buffer.index);
+ staging_buffer_pool.FreeDeferredStagingBuffer(buffer);
}
u64 BufferCacheRuntime::GetDeviceMemoryUsage() const {
diff --git a/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp b/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp
index edd0746dc..cadad6507 100644
--- a/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp
+++ b/src/video_core/renderer_opengl/gl_staging_buffer_pool.cpp
@@ -45,6 +45,7 @@ StagingBufferMap StagingBuffers::RequestMap(size_t requested_size, bool insert_f
}
void StagingBuffers::FreeDeferredStagingBuffer(size_t index) {
+ ASSERT(allocs[index].deferred);
allocs[index].deferred = false;
}
@@ -152,8 +153,8 @@ StagingBufferMap StagingBufferPool::RequestDownloadBuffer(size_t size, bool defe
return download_buffers.RequestMap(size, false, deferred);
}
-void StagingBufferPool::FreeDeferredStagingBuffer(size_t index) {
- download_buffers.FreeDeferredStagingBuffer(index);
+void StagingBufferPool::FreeDeferredStagingBuffer(StagingBufferMap& buffer) {
+ download_buffers.FreeDeferredStagingBuffer(buffer.index);
}
} // namespace OpenGL
diff --git a/src/video_core/renderer_opengl/gl_staging_buffer_pool.h b/src/video_core/renderer_opengl/gl_staging_buffer_pool.h
index 598ddc172..07a56b4d2 100644
--- a/src/video_core/renderer_opengl/gl_staging_buffer_pool.h
+++ b/src/video_core/renderer_opengl/gl_staging_buffer_pool.h
@@ -93,7 +93,7 @@ public:
StagingBufferMap RequestUploadBuffer(size_t size);
StagingBufferMap RequestDownloadBuffer(size_t size, bool deferred = false);
- void FreeDeferredStagingBuffer(size_t index);
+ void FreeDeferredStagingBuffer(StagingBufferMap& buffer);
private:
StagingBuffers upload_buffers{GL_MAP_WRITE_BIT, GL_MAP_WRITE_BIT | GL_MAP_FLUSH_EXPLICIT_BIT};
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.cpp b/src/video_core/renderer_opengl/gl_texture_cache.cpp
index 512eef575..66a5ca03e 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.cpp
+++ b/src/video_core/renderer_opengl/gl_texture_cache.cpp
@@ -557,8 +557,12 @@ StagingBufferMap TextureCacheRuntime::UploadStagingBuffer(size_t size) {
return staging_buffer_pool.RequestUploadBuffer(size);
}
-StagingBufferMap TextureCacheRuntime::DownloadStagingBuffer(size_t size) {
- return staging_buffer_pool.RequestDownloadBuffer(size);
+StagingBufferMap TextureCacheRuntime::DownloadStagingBuffer(size_t size, bool deferred) {
+ return staging_buffer_pool.RequestDownloadBuffer(size, deferred);
+}
+
+void TextureCacheRuntime::FreeDeferredStagingBuffer(StagingBufferMap& buffer) {
+ staging_buffer_pool.FreeDeferredStagingBuffer(buffer);
}
u64 TextureCacheRuntime::GetDeviceMemoryUsage() const {
diff --git a/src/video_core/renderer_opengl/gl_texture_cache.h b/src/video_core/renderer_opengl/gl_texture_cache.h
index e71b87e99..34870c81f 100644
--- a/src/video_core/renderer_opengl/gl_texture_cache.h
+++ b/src/video_core/renderer_opengl/gl_texture_cache.h
@@ -74,7 +74,9 @@ public:
StagingBufferMap UploadStagingBuffer(size_t size);
- StagingBufferMap DownloadStagingBuffer(size_t size);
+ StagingBufferMap DownloadStagingBuffer(size_t size, bool deferred = false);
+
+ void FreeDeferredStagingBuffer(StagingBufferMap& buffer);
u64 GetDeviceLocalMemory() const {
return device_access_memory;
@@ -359,7 +361,7 @@ struct TextureCacheParams {
static constexpr bool FRAMEBUFFER_BLITS = true;
static constexpr bool HAS_EMULATED_COPIES = true;
static constexpr bool HAS_DEVICE_MEMORY_INFO = true;
- static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = false;
+ static constexpr bool IMPLEMENTS_ASYNC_DOWNLOADS = true;
using Runtime = OpenGL::TextureCacheRuntime;
using Image = OpenGL::Image;
@@ -367,7 +369,7 @@ struct TextureCacheParams {
using ImageView = OpenGL::ImageView;
using Sampler = OpenGL::Sampler;
using Framebuffer = OpenGL::Framebuffer;
- using AsyncBuffer = u32;
+ using AsyncBuffer = OpenGL::StagingBufferMap;
using BufferType = GLuint;
};